package condicao

import util.GerenciadorTabelas;
import java.util.ArrayList;
import java.util.Vector;
import java.util.List;
import java.util.Date;
import ws.CondicaoCompra;
import ws.CondicaoCompraParcela;
import ws.CondicaoCompraVetor;
import ws.BuscaChaveEstrangeira;
import ws.BuscaChaveEstrangeiraVetor;
import wsgroovy.ManagerWebService;

class CondicaoDeCompraController {
    
    def index = {
        redirect action:"list", params:params 
    }

    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {
        GerenciadorTabelas.getInstance().getParams().clear();
        //GerenciadorTabelas.getInstance().setCondicao(new CondicaoCompra());
        GerenciadorTabelas.getInstance().getCondicaoParcelas().clear()

        def proxy = ManagerWebService.getInstance().getProxy()
        ArrayList<CondicaoCompra> lista = new ArrayList<CondicaoCompra>();

        //gambiarra para ver se ja foi atribuido 'def condicaoCompra' com o tipo de classe lá do BPEL
        if( (params.buscaCondicoes == null) && (ManagerWebService.getInstance().getCondicaoCompra().getClass() == String.class) ){
            def cond = proxy.readCondicaoPorId(-1)
            ManagerWebService.getInstance().setCondicaoCompra(cond);
        }

        //só faz a chamada do Web Service se foi digitado alguma coisa (aceita String vazia, barra de espaços e semelhantes)
        if(params.buscaCondicoes != null){
            def condVetor = proxy.readCondicao(params.buscaCondicoes) 
            ManagerWebService.getInstance().setCondicaoCompra(condVetor.getLista().get(0));     
            lista = condVetor.getLista();

            if(lista.get(0).getTcodigoPk() == -1){  //"desfaz a gambiarra com outra gambiarra hehehe"
                lista.clear();
            }
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        [condicaoDeCompraInstanceList: lista]
    }

    def show = {
        //def condicaoDeCompraInstance = CondicaoDeCompra.get( params.id )
        //CondicaoCompra condicao = GerenciadorTabelas.getInstance().getCondicaoPorId(Integer.parseInt(params.id));
        def condicaoDeCompraInstance = ManagerWebService.getInstance().getProxy().readCondicaoPorId(params.id)
        ArrayList<CondicaoCompraParcela> lista = condicaoDeCompraInstance.getCondicaoCompraParcelaList();
        
        if(!condicaoDeCompraInstance) {
            flash.message = "CondicaoDeCompra not found with id ${params.id}"
            redirect(action:list)
        }
        else {
            [ condicaoDeCompraInstance : condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista ]
        }
    }

    def delete = {
        //def condicaoDeCompraInstance = CondicaoDeCompra.get( params.id )
        //boolean wasDeleted = GerenciadorTabelas.getInstance().deletarCondicao(Integer.parseInt(params.id));
        boolean wasDeleted = ManagerWebService.getInstance().getProxy().deleteCondicao(params.id);
        if(wasDeleted) {
            flash.message = "Condição ${params.id} deletada"
        }
        else {
            flash.message = "Condição não deletada ou não encontrada com id ${params.id}"
        }
        redirect(action:"list")
    }

    def edit = {
        def condicaoDeCompraInstance = ManagerWebService.getInstance().getProxy().readCondicaoPorId(params.id);
        ArrayList<CondicaoCompraParcela> lista = condicaoDeCompraInstance.getCondicaoCompraParcelaList();
        GerenciadorTabelas.getInstance().getCondicaoParcelas().clear()

        CondicaoCompra c = new CondicaoCompra()
        c.setTcodigo_pk(condicaoDeCompraInstance.tcodigoPk);
        c.setTdescricao(condicaoDeCompraInstance.tdescricao);
        c.setTforma_parcelamento_chk(condicaoDeCompraInstance.tformaParcelamentoChk);
        c.setTgrupo_comissao_fk(condicaoDeCompraInstance.tgrupoComissaoFk);
        c.setTpossui_entrada_chk(condicaoDeCompraInstance.tpossuiEntradaChk);
        c.setTquantidade_parcelas(condicaoDeCompraInstance.tquantidadeParcelas);
        GerenciadorTabelas.getInstance().setCondicao(c)

        for(CondicaoCompraParcela i : lista){
            CondicaoCompraParcela p = new CondicaoCompraParcela()
            p.setTcodigo_fpk(i.getTcodigoFpk())
            p.setTparcela_pk(i.getTparcelaPk())
            p.setTnum_dias_vencimento(i.getTnumDiasVencimento())
            p.setTpercentual_parcela(i.getTpercentualParcela())
            p.setTvencimento_fixo_chk(i.getTvencimentoFixoChk())
            p.setTdia_vencimento1(i.getTdiaVencimento1())
            p.setTdia_vencimento2(i.getTdiaVencimento2())
            GerenciadorTabelas.getInstance().getCondicaoParcelas().add(p)
        }

        condicaoDeCompraInstance = new CondicaoDeCompra()
        condicaoDeCompraInstance.tgrupo_comissao_fk = c.getTgrupo_comissao_fk()
        condicaoDeCompraInstance.tpossui_entrada_chk = c.getTpossui_entrada_chk()
        condicaoDeCompraInstance.tforma_parcelamento_chk = c.getTforma_parcelamento_chk()
        condicaoDeCompraInstance.tdescricao = c.getTdescricao()
        condicaoDeCompraInstance.tcodigo_pk = c.getTcodigo_pk()


        GerenciadorTabelas.getInstance().getParams().put("tgrupo_comissao_fk", condicaoDeCompraInstance.tgrupo_comissao_fk)
        GerenciadorTabelas.getInstance().getParams().put("tpossui_entrada_chk", condicaoDeCompraInstance.tpossui_entrada_chk)
        GerenciadorTabelas.getInstance().getParams().put("tforma_parcelamento_chk", condicaoDeCompraInstance.tforma_parcelamento_chk)
        GerenciadorTabelas.getInstance().getParams().put("tdescricao", condicaoDeCompraInstance.tdescricao)
        GerenciadorTabelas.getInstance().getParams().put("tcodigo_pk", condicaoDeCompraInstance.tcodigo_pk)

        if(GerenciadorTabelas.getInstance().getParams().isEmpty()){
            condicaoDeCompraInstance.properties = params
        }
        else{
            condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()
            GerenciadorTabelas.getInstance().resetMap();
            println "Valores depois: " + GerenciadorTabelas.getInstance().getParams()
        }
        
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        [condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList:lista]
    
    }

    def update = {
        println "UPDATE: " + params
        int id;
        if(GerenciadorTabelas.getInstance().getParams().isEmpty()){
            id = new Integer(params.id)
        }
        else{
            id = GerenciadorTabelas.getInstance().getCondicao().getTcodigo_pk()
        }
        
        def condicaoDeCompraInstance = ManagerWebService.getInstance().getProxy().readCondicaoPorId(params.id);
        ArrayList<CondicaoCompraParcela> lista = condicaoDeCompraInstance.getCondicaoCompraParcelaList();
        
        if(condicaoDeCompraInstance) {
            if(params.version) {
                def version = params.version.toLong()
                if(condicaoDeCompraInstance.version > version) {
                    
                    condicaoDeCompraInstance.errors.rejectValue("version", "condicaoDeCompra.optimistic.locking.failure", "Another user has updated this CondicaoDeCompra while you were editing.")

                    render view:'edit', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]
                    return
                }
            }
            //condicaoDeCompraInstance.properties = params
            //            if(!params.tdescricao.equalsIgnoreCase(condicao.getTdescricao())){
            //condicao.setTdescricao(params.tdescricao);
            //GerenciadorTabelas.getInstance().atualizarCondicao(condicao);
            //ManagerWebService.getInstance().getProxyCondicao().updateCondicao(condicao);
            //flash.message = "Operação UPDATE em manutenção..."
            //redirect action:'list'
            //            }
            //            else {
            //                render view:'edit', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]
            //                return
            //            }

            ArrayList<CondicaoCompraParcela> listaAtualizada = GerenciadorTabelas.getInstance().getCondicaoParcelas();
            condicaoDeCompraInstance = new CondicaoDeCompra()
            condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()  //TVZ não precise
            condicaoDeCompraInstance.properties = params

            if(!listaAtualizada.isEmpty()){

                CondicaoCompra condicao = GerenciadorTabelas.getInstance().getCondicao()
                condicao.setTdescricao(condicaoDeCompraInstance.tdescricao);
                condicao.setTforma_parcelamento_chk(condicaoDeCompraInstance.tforma_parcelamento_chk);
                condicao.setTgrupo_comissao_fk(condicaoDeCompraInstance.tgrupo_comissao_fk);
                condicao.setTpossui_entrada_chk(condicaoDeCompraInstance.tpossui_entrada_chk);
                condicao.setCondicaoCompraParcelaList(new Vector(listaAtualizada));

                def proxy = ManagerWebService.getInstance().getProxy()

                String isValid = GerenciadorTabelas.getInstance().validarCondicao(condicao);
                if(isValid.isEmpty()){
                    //Hora de fazer o "cast" gambiarrístico
                    def c = ManagerWebService.getInstance().getCondicaoCompra()
                    c.setTcodigoPk(condicao.getTcodigo_pk());
                    c.setTdescricao(condicao.getTdescricao());
                    c.setTformaParcelamentoChk(condicao.getTforma_parcelamento_chk());
                    c.setTgrupoComissaoFk(condicao.getTgrupo_comissao_fk());
                    c.setTpossuiEntradaChk(condicao.getTpossui_entrada_chk());
                    c.setTquantidadeParcelas(condicao.getTquantidade_parcelas());   //em validarCondicao() é setado esse valor

                    for(CondicaoCompraParcela i : condicao.getCondicaoCompraParcelaList()){
                        def p = ManagerWebService.getInstance().getCondicaoCompraParcela()
                        p = p.getClass().newInstance();
                        p.setTcodigoFpk(i.getTcodigo_fpk())
                        p.setTparcelaPk(i.getTparcela_pk())
                        p.setTnumDiasVencimento(i.getTnum_dias_vencimento())
                        p.setTpercentualParcela(i.getTpercentual_parcela())
                        p.setTvencimentoFixoChk(i.getTvencimento_fixo_chk())
                        p.setTdiaVencimento1(i.getTdia_vencimento1())
                        p.setTdiaVencimento2(i.getTdia_vencimento2())

                        c.getCondicaoCompraParcelaList().add(p);
                    }

                    if(proxy.updateCondicao(c) == true){
                        flash.message = "Condição atualizada!"
                        GerenciadorTabelas.getInstance().getCondicaoParcelas().clear();
                    }
                    else{
                        flash.message = "Condição não atualizada!"
                    }
                    //depois de finalizada a operação, o vetor das parcelas é ZERADO
                    c.getCondicaoCompraParcelaList().clear()
                }
                else{
                    flash.message = isValid
                }
                redirect action:'list'
            }
            else {
                //params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
                flash.message = "Não foi possível atualizar a Condição!!"
                //render view:'create', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]
                redirect action:'list'
            }        
        }
        else {
            flash.message = "CondicaoDeCompra não encontrado com ID ${params.id}"
            redirect action:'list'
        }
    }

    def create = {
        Vector<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas();
        def condicaoDeCompraInstance = new CondicaoDeCompra()

        if(GerenciadorTabelas.getInstance().getParams().isEmpty()){
            condicaoDeCompraInstance.properties = params
        }
        else{
            lista.clear()
            condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()
            GerenciadorTabelas.getInstance().resetMap();
            println "Valores depois: " + GerenciadorTabelas.getInstance().getParams()
        }
        //condicaoDeCompraInstance.properties = params
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        return ['condicaoDeCompraInstance':condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista ]
    }

    def save = {
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas();
        def condicaoDeCompraInstance = new CondicaoDeCompra()
        condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()
        condicaoDeCompraInstance.properties = params
        
        if(!lista.isEmpty()){
            flash.message = "Condição de Compra efetuada!"

            CondicaoCompra condicao = new CondicaoCompra();
            condicao.setTcodigo_pk(-1);
            condicao.setTdescricao(condicaoDeCompraInstance.tdescricao);
            condicao.setTforma_parcelamento_chk(condicaoDeCompraInstance.tforma_parcelamento_chk);
            condicao.setTgrupo_comissao_fk(condicaoDeCompraInstance.tgrupo_comissao_fk);
            condicao.setTpossui_entrada_chk(condicaoDeCompraInstance.tpossui_entrada_chk);
            condicao.setCondicaoCompraParcelaList(new Vector(lista));

            println "Metodo save: " + condicao.getCondicaoCompraParcelaList();
            println "Metodo save2: " + lista;

            def proxy = ManagerWebService.getInstance().getProxy()
            
            String isValid = GerenciadorTabelas.getInstance().validarCondicao(condicao);
            if(isValid.isEmpty()){
                //Hora de fazer o "cast" gambiarrístico
                def c = ManagerWebService.getInstance().getCondicaoCompra()
                c.setTcodigoPk(condicao.getTcodigo_pk());
                c.setTdescricao(condicao.getTdescricao());
                c.setTformaParcelamentoChk(condicao.getTforma_parcelamento_chk());
                c.setTgrupoComissaoFk(condicao.getTgrupo_comissao_fk());
                c.setTpossuiEntradaChk(condicao.getTpossui_entrada_chk());
                c.setTquantidadeParcelas(condicao.getTquantidade_parcelas());   //em validarCondicao() é setado esse valor

                for(CondicaoCompraParcela i : condicao.getCondicaoCompraParcelaList()){
                    def p = ManagerWebService.getInstance().getCondicaoCompraParcela()
                    p = p.getClass().newInstance();
                    p.setTcodigoFpk(i.getTcodigo_fpk())
                    p.setTparcelaPk(i.getTparcela_pk())
                    p.setTnumDiasVencimento(i.getTnum_dias_vencimento())
                    p.setTpercentualParcela(i.getTpercentual_parcela())
                    p.setTvencimentoFixoChk(i.getTvencimento_fixo_chk())
                    if(i.getTdia_vencimento1() == null){
                        p.setTdiaVencimento1(-1)
                    }
                    if(i.getTdia_vencimento2() == null){
                        p.setTdiaVencimento2(-1)
                    }                    

                    c.getCondicaoCompraParcelaList().add(p);
                }
                
                if(proxy.createCondicao(c) == true){
                    flash.message = "Condição criada!"
                    GerenciadorTabelas.getInstance().getCondicaoParcelas().clear();
                }
                else{
                    flash.message = "Condição não criada!"
                }
                //depois de finalizada a operação, o vetor das parcelas é ZERADO
                c.getCondicaoCompraParcelaList().clear()

            }
            else{
                flash.message = isValid
            }
            
            redirect action:'list'
        }
        else {
            //params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
            flash.message = "Cadastre ao menos 1 condição!!"
            render view:'create', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]
        }
    }

    def insereParcela = {
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas();
        def condicaoDeCompraInstance = new CondicaoDeCompra()
        condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()
        condicaoDeCompraInstance.properties = params

        condicaoDeCompraInstance.tcodigo_pk = 1
        condicaoDeCompraInstance.tgrupo_comissao_fk = 1;
        if(condicaoDeCompraInstance.validate()){
            
            //Converte tpercentual_parcela para BigDecimal
            String pp = condicaoDeCompraInstance.tpercentual_parcela;
            pp = pp.replace(",", ".");
            BigDecimal percentual = new BigDecimal(pp);

            Integer dia1, dia2;
            String vencFixo = "N";
            if(condicaoDeCompraInstance.tforma_parcelamento_chk == "B"){
                //Converte tdia_vencimento1 para Integer
                dia1 = new Integer(condicaoDeCompraInstance.tdia_vencimento1);
                //Converte tdia_vencimento2 para Integer
                dia2 = new Integer(condicaoDeCompraInstance.tdia_vencimento2);
                vencFixo = "S"
            }
            
            //Converte tnum_dias_vencimento para Integer
            Integer diasVencimento = new Integer(condicaoDeCompraInstance.tnum_dias_vencimento);

            CondicaoCompraParcela parcela = new CondicaoCompraParcela();
            parcela.setTdia_vencimento1(dia1);
            parcela.setTdia_vencimento2(dia2);
            parcela.setTnum_dias_vencimento(diasVencimento);
            parcela.setTpercentual_parcela(percentual);
            parcela.setTvencimento_fixo_chk(vencFixo);

            lista.add(parcela);
            params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
            
            flash.message = "Parcela inserida na Condição!"
        }
        render view:'create', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]
    }

    def alterarParcela = {
        def condicaoDeCompraInstance = new CondicaoDeCompra()
        def condicao = GerenciadorTabelas.getInstance().getCondicao()

        condicaoDeCompraInstance.tdescricao = GerenciadorTabelas.getInstance().getParams().get("tdescricao")
        condicaoDeCompraInstance.tforma_parcelamento_chk = GerenciadorTabelas.getInstance().getParams().get("tforma_parcelamento_chk")
        condicaoDeCompraInstance.tcodigo_pk = GerenciadorTabelas.getInstance().getParams().get("tcodigo_pk")
        condicaoDeCompraInstance.tpossui_entrada_chk = GerenciadorTabelas.getInstance().getParams().get("tpossui_entrada_chk")
        condicaoDeCompraInstance.tgrupo_comissao_fk = new Integer(GerenciadorTabelas.getInstance().getParams().get("tgrupo_comissao_fk"))

        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas()
        def condicaoToUpdateInstance = GerenciadorTabelas.getInstance().getCondicaoParcelas().get(Integer.parseInt(params.id));

        condicaoDeCompraInstance.tdia_vencimento1 = condicaoToUpdateInstance.getTdia_vencimento1()
        condicaoDeCompraInstance.tdia_vencimento2 = condicaoToUpdateInstance.getTdia_vencimento2()
        condicaoDeCompraInstance.tpercentual_parcela = condicaoToUpdateInstance.getTpercentual_parcela()
        condicaoDeCompraInstance.tnum_dias_vencimento = condicaoToUpdateInstance.getTnum_dias_vencimento()
        condicaoDeCompraInstance.tparcela_pk = condicaoToUpdateInstance.getTparcela_pk()
        println "cotacaoToUpdate: " + condicaoToUpdateInstance.tparcela_pk

        GerenciadorTabelas.getInstance().getParams().put("tdescricao", condicaoDeCompraInstance.tdescricao)
        GerenciadorTabelas.getInstance().getParams().put("tforma_parcelamento_chk", condicaoDeCompraInstance.tforma_parcelamento_chk)
        GerenciadorTabelas.getInstance().getParams().put("tpossui_entrada_chk", condicaoDeCompraInstance.tpossui_entrada_chk)
        GerenciadorTabelas.getInstance().getParams().put("tgrupo_comissao_fk", condicaoDeCompraInstance.tgrupo_comissao_fk)
        GerenciadorTabelas.getInstance().getParams().put("tdia_vencimento1", condicaoDeCompraInstance.tdia_vencimento1)
        GerenciadorTabelas.getInstance().getParams().put("tdia_vencimento2", condicaoDeCompraInstance.tdia_vencimento2)
        GerenciadorTabelas.getInstance().getParams().put("tpercentual_parcela", condicaoDeCompraInstance.tpercentual_parcela)
        GerenciadorTabelas.getInstance().getParams().put("tnum_dias_vencimento", condicaoDeCompraInstance.tnum_dias_vencimento)
        GerenciadorTabelas.getInstance().getParams().put("tparcela_pk", condicaoDeCompraInstance.tparcela_pk)
        GerenciadorTabelas.getInstance().getParams().put("tcodigo_pk", condicaoDeCompraInstance.tcodigo_pk)
        
        flash.message = "Atualizando a Condição de número ${condicaoDeCompraInstance.tparcela_pk}"
        render view:'edit', model:[ condicaoDeCompraInstance : condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]//, cotacaoToUpdateInstance:cotacaoToUpdateInstance ]

    }

    def atualizarParcela = {
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas()
        if(params.id == ""){
            params.id = "1"
        }

        def condicaoToUpdateInstance = GerenciadorTabelas.getInstance().getCondicaoParcelas().get(Integer.parseInt(params.id) - 1);
        GerenciadorTabelas.getInstance().setCondicaoParcelaToUpdate(condicaoToUpdateInstance)
        println "cotacaoToUpdate: " + condicaoToUpdateInstance.tparcela_pk

        //atualizando a parcela filha
        def condicaoDeCompraInstance = new CondicaoDeCompra()
        condicaoDeCompraInstance.tparcela_pk = 1
        condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()     //o que for selecionado de FK não estará vazio
        condicaoDeCompraInstance.properties = params       //se estiver vazio, realmente veio como 'blank'

        //cotacaoMercadoriaInstance.tcodigo_pk = 1
        //cotacaoMercadoriaInstance.tpedido_gerado = "N"
        println "seq: " + condicaoDeCompraInstance.tparcela_pk
        println "Atualiza parcela: " + params
        println "Atualiza parcela2: " + GerenciadorTabelas.getInstance().getParams()
        if(condicaoDeCompraInstance.validate()){

            println "validou"
            
            Integer dia1 = -1, dia2 = -1;
            String vencFixo = "N";
            if(condicaoDeCompraInstance.tforma_parcelamento_chk == "B"){
                //Converte tdia_vencimento1 para Integer
                dia1 = new Integer(condicaoDeCompraInstance.tdia_vencimento1);
                //Converte tdia_vencimento2 para Integer
                dia2 = new Integer(condicaoDeCompraInstance.tdia_vencimento2);
                vencFixo = "S"
            }
            
            //Converte tpercentual_parcela para BigDecimal
            String pc = condicaoDeCompraInstance.tpercentual_parcela;
            //pc = pc.replace(".", "");
            pc = pc.replace(",", ".");
            BigDecimal percentual = new BigDecimal(pc);

            //Converte tnum_dias_vencimento para Integer
            Integer diasVenc = new Integer(condicaoDeCompraInstance.tnum_dias_vencimento);

            CondicaoCompraParcela parcela = new CondicaoCompraParcela();
            parcela.setTdia_vencimento1(dia1);
            parcela.setTdia_vencimento2(dia2);
            parcela.setTnum_dias_vencimento(diasVenc);
            parcela.setTpercentual_parcela(percentual);
            parcela.setTvencimento_fixo_chk(vencFixo);
            parcela.setTparcela_pk(condicaoDeCompraInstance.tparcela_pk);

            lista.set(condicaoDeCompraInstance.tparcela_pk-1, parcela);
            params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

            flash.message = "Parcela ${condicaoToUpdateInstance.tparcelaPk} atualizada"
            condicaoDeCompraInstance = new CondicaoDeCompra()
            condicaoDeCompraInstance.tdescricao = GerenciadorTabelas.getInstance().getParams().get("tdescricao")
            condicaoDeCompraInstance.tforma_parcelamento_chk = GerenciadorTabelas.getInstance().getParams().get("tforma_parcelamento_chk")
            condicaoDeCompraInstance.tcodigo_pk = GerenciadorTabelas.getInstance().getParams().get("tcodigo_pk")
            condicaoDeCompraInstance.tpossui_entrada_chk = GerenciadorTabelas.getInstance().getParams().get("tpossui_entrada_chk")
            condicaoDeCompraInstance.tgrupo_comissao_fk = GerenciadorTabelas.getInstance().getParams().get("tgrupo_comissao_fk")
        }
        //terminando de atualizar a parcela filha

        render view:'edit', model:[ condicaoDeCompraInstance : condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]//, cotacaoToUpdateInstance:cotacaoToUpdateInstance ]
    }

    def deletarParcela = {
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas()
        if(lista.size() == 1){
            flash.message = "Ao menos 1 parcela deve permanecer cadastrada. Modifique-a em vez de deletá-la!"
        }
        else{
            GerenciadorTabelas.getInstance().removerParcela(Integer.parseInt(params.id))
        }

        def condicaoDeCompraInstance = new CondicaoDeCompra()
        def condicao = GerenciadorTabelas.getInstance().getCondicao()
        condicaoDeCompraInstance.tdescricao = condicao.getTdescricao()
        condicaoDeCompraInstance.tforma_parcelamento_chk = condicao.getTforma_parcelamento_chk()
        condicaoDeCompraInstance.tcodigo_pk = condicao.getTcodigo_pk()
        condicaoDeCompraInstance.tpossui_entrada_chk = condicao.getTpossui_entrada_chk()

        //flash.message = "Cotação de número ${params.id + 1} deletada!"
        render view:'edit', model:[ condicaoDeCompraInstance : condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]//, cotacaoToUpdateInstance:cotacaoToUpdateInstance ]
    }

    def insereParcelaNoEdit = {
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas();
        def condicaoDeCompraInstance = new CondicaoDeCompra()
        condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams()
        condicaoDeCompraInstance.properties = params

        condicaoDeCompraInstance.tcodigo_pk = 1
        condicaoDeCompraInstance.tparcela_pk = 0
        condicaoDeCompraInstance.tforma_parcelamento_chk = "A"
        condicaoDeCompraInstance.tpossui_entrada_chk = "S"
        println "Insere parcela: " + params
        println "Insere parcela2: " + GerenciadorTabelas.getInstance().getParams()
        if(condicaoDeCompraInstance.validate()){

            Integer dia1 = -1, dia2 = -1;
            String vencFixo = "N";
            if(condicaoDeCompraInstance.tforma_parcelamento_chk == "B"){
                //Converte tdia_vencimento1 para Integer
                dia1 = new Integer(condicaoDeCompraInstance.tdia_vencimento1);
                //Converte tdia_vencimento2 para Integer
                dia2 = new Integer(condicaoDeCompraInstance.tdia_vencimento2);
                vencFixo = "S"
            }

            //Converte tpercentual_parcela para BigDecimal
            String pc = condicaoDeCompraInstance.tpercentual_parcela;
            //pc = pc.replace(".", "");
            pc = pc.replace(",", ".");
            BigDecimal percentual = new BigDecimal(pc);

            //Converte tnum_dias_vencimento para Integer
            Integer diasVenc = new Integer(condicaoDeCompraInstance.tnum_dias_vencimento);

            CondicaoCompraParcela parcela = new CondicaoCompraParcela();
            parcela.setTdia_vencimento1(dia1);
            parcela.setTdia_vencimento2(dia2);
            parcela.setTnum_dias_vencimento(diasVenc);
            parcela.setTpercentual_parcela(percentual);
            parcela.setTvencimento_fixo_chk(vencFixo);
            
            parcela.setTparcela_pk(lista.size()+1);
            lista.add(parcela);
            params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

            condicaoDeCompraInstance = new CondicaoDeCompra()
            condicaoDeCompraInstance.tdescricao = GerenciadorTabelas.getInstance().getParams().get("tdescricao")
            condicaoDeCompraInstance.tforma_parcelamento_chk = GerenciadorTabelas.getInstance().getParams().get("tforma_parcelamento_chk")
            condicaoDeCompraInstance.tcodigo_pk = GerenciadorTabelas.getInstance().getParams().get("tcodigo_pk")
            condicaoDeCompraInstance.tpossui_entrada_chk = GerenciadorTabelas.getInstance().getParams().get("tpossui_entrada_chk")
            condicaoDeCompraInstance.tgrupo_comissao_fk = GerenciadorTabelas.getInstance().getParams().get("tgrupo_comissao_fk")

            flash.message = "Parcela inserida na Condição!"
        }
        render view:'edit', model:[ condicaoDeCompraInstance : condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]//, cotacaoToUpdateInstance:cotacaoToUpdateInstance ]
    }

    def searchGrupo = {
        //redirect action:"list", params:params
        render view:'searchGrupo', params:params
        GerenciadorTabelas.getInstance().setParams(new HashMap(params));
    }

    def selecionarGrupo = {
        GerenciadorTabelas.getInstance().getParams().put("tgrupo_comissao_fk", params.id)
        ArrayList<CondicaoCompraParcela> lista = GerenciadorTabelas.getInstance().getCondicaoParcelas();

        if(GerenciadorTabelas.getInstance().getParams().containsKey("id")){
            
            //atualizando a cotacao filha
            def condicaoDeCompraInstance = new CondicaoDeCompra()
            condicaoDeCompraInstance.properties = GerenciadorTabelas.getInstance().getParams() //o que for selecionado de FK não estará vazio
            condicaoDeCompraInstance.properties = params        //se estiver vazio, realmente veio como 'blank'
            println "Se contains ID: " + GerenciadorTabelas.getInstance().getParams()

            condicaoDeCompraInstance.setTgrupo_comissao_fk(new Integer(GerenciadorTabelas.getInstance().getParams().get("tgrupo_comissao_fk")))
         
            render view:'edit', model:[condicaoDeCompraInstance:condicaoDeCompraInstance, condicaoDeCompraInstanceList: lista]//, cotacaoToUpdateInstance:cotacaoToUpdateInstance]
        }
        else{
            redirect action:'create'
        }
    }

    def buscarGrupoPorId = {

        def proxy = ManagerWebService.getInstance().getProxy()
        def grupoFK = proxy.searchGrupoPorId(params.codigoGrupo);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(grupoFK != null){
            lista = grupoFK.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //render view:'create', model:[classificacaoFiscalList: lista, 'fornecedorDominioInstance':fornecedorDominioInstance]
        render view:'searchGrupo', model:[grupoList: lista]
    }

    def buscarGrupoPorDescricao = {
        def proxy = ManagerWebService.getInstance().getProxy()
        def grupoFK = proxy.searchGrupoPorNome(params.descricaoGrupo);

        ArrayList<BuscaChaveEstrangeira> lista = new ArrayList<BuscaChaveEstrangeira>();

        if(grupoFK != null){
            lista = grupoFK.getLista();
        }
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        //render view:'create', model:[classificacaoFiscalList: lista]
        render view:'searchGrupo', model:[unidadeList: lista]
    }

}